package reports.builders;

import java.util.Collection;

public interface IBuilder {

	/**
	 * Adds a title to the document that is being built
	 * @param title the string to add to the document.
	 */
	public void addTitle(String title);

	/**
	 * adds the table that is currently being built to the document
	 * once a table is added it can not be modified
	 */
	public void endTable();
	
	/**
	 * adds a row to the table, startTable must be called before rows
	 * can be added to it.
	 * @param row an collections of strings to be formated
	 * as a row in the table
	 */
	public void addRow(Collection<String> row);
	
	/**
	 * 
	 * @param headers a collection of strings that server as the headers
	 * for the table
	 */
	public void addTableHeader(Collection<String> headers);
	
	/**
	 * this function inserts padding into the document between tables and titles or text
	 * 
	 * @param paddingValue integer value that is the amount of padding
	 */
	public void insertPadding(int paddingValue);
	
	/**
	 * Adds a subtitle to the document
	 * @param subTitle the subtitle
	 */
	public void addsubTitle(String subTitle);
	
	/**
	 * adds plain text to a document
	 * @param text string to be added
	 */
	public void addParagraph(String text);
	
	public void saveToFile();
	
	public String getFilePath();
	
	public void addList(Collection<String> list);

	/**
	 * marks the start of the table performs the table init, must be called
	 * before addRow can be called
	 * @param columns number of columns
	 */
	void startTable(int columns);
	
}
